home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / mozilla-firefox / include / string / nsLiteralString.h < prev    next >
C/C++ Source or Header  |  2006-05-08  |  5KB  |  117 lines

  1. /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
  2. /* ***** BEGIN LICENSE BLOCK *****
  3.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  4.  *
  5.  * The contents of this file are subject to the Mozilla Public License Version
  6.  * 1.1 (the "License"); you may not use this file except in compliance with
  7.  * the License. You may obtain a copy of the License at
  8.  * http://www.mozilla.org/MPL/
  9.  *
  10.  * Software distributed under the License is distributed on an "AS IS" basis,
  11.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  12.  * for the specific language governing rights and limitations under the
  13.  * License.
  14.  *
  15.  * The Original Code is Mozilla.
  16.  *
  17.  * The Initial Developer of the Original Code is
  18.  * Netscape Communications.
  19.  * Portions created by the Initial Developer are Copyright (C) 2001
  20.  * the Initial Developer. All Rights Reserved.
  21.  *
  22.  * Contributor(s):
  23.  *   Scott Collins <scc@mozilla.org> (original author)
  24.  *
  25.  * Alternatively, the contents of this file may be used under the terms of
  26.  * either of the GNU General Public License Version 2 or later (the "GPL"),
  27.  * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  28.  * in which case the provisions of the GPL or the LGPL are applicable instead
  29.  * of those above. If you wish to allow use of your version of this file only
  30.  * under the terms of either the GPL or the LGPL, and not to allow others to
  31.  * use your version of this file under the terms of the MPL, indicate your
  32.  * decision by deleting the provisions above and replace them with the notice
  33.  * and other provisions required by the GPL or the LGPL. If you do not delete
  34.  * the provisions above, a recipient may use your version of this file under
  35.  * the terms of any one of the MPL, the GPL or the LGPL.
  36.  *
  37.  * ***** END LICENSE BLOCK ***** */
  38.  
  39. #ifndef nsLiteralString_h___
  40. #define nsLiteralString_h___
  41.  
  42. #ifndef nscore_h___
  43. #include "nscore.h"
  44. #endif
  45.  
  46. #ifndef nsDependentString_h___
  47. #include "nsDependentString.h"
  48. #endif
  49.  
  50.  
  51. #if 0
  52. inline
  53. const nsDependentString
  54. literal_string( const nsAString::char_type* aPtr )
  55.   {
  56.     return nsDependentString(aPtr);
  57.   }
  58.  
  59. inline
  60. const nsDependentString
  61. literal_string( const nsAString::char_type* aPtr, PRUint32 aLength )
  62.   {
  63.     return nsDependentString(aPtr, aLength);
  64.   }
  65.  
  66. inline
  67. const nsDependentCString
  68. literal_string( const nsACString::char_type* aPtr )
  69.   {
  70.     return nsDependentCString(aPtr);
  71.   }
  72.  
  73. inline
  74. const nsDependentCString
  75. literal_string( const nsACString::char_type* aPtr, PRUint32 aLength )
  76.   {
  77.     return nsDependentCString(aPtr, aLength);
  78.   }
  79. #endif
  80.  
  81. #ifdef HAVE_CPP_2BYTE_WCHAR_T
  82.   #define NS_LL(s)                                L##s
  83.   #define NS_MULTILINE_LITERAL_STRING(s)          nsDependentString(NS_REINTERPRET_CAST(const nsAString::char_type*, s), PRUint32((sizeof(s)/sizeof(wchar_t))-1))
  84.   #define NS_MULTILINE_LITERAL_STRING_INIT(n,s)   n(NS_REINTERPRET_CAST(const nsAString::char_type*, s), PRUint32((sizeof(s)/sizeof(wchar_t))-1))
  85.   #define NS_NAMED_MULTILINE_LITERAL_STRING(n,s)  const nsDependentString n(NS_REINTERPRET_CAST(const nsAString::char_type*, s), PRUint32((sizeof(s)/sizeof(wchar_t))-1))
  86.   typedef nsDependentString nsLiteralString;
  87. #else
  88.   #define NS_LL(s)                                s
  89.   #define NS_MULTILINE_LITERAL_STRING(s)          NS_ConvertASCIItoUTF16(s, PRUint32(sizeof(s)-1))
  90.   #define NS_MULTILINE_LITERAL_STRING_INIT(n,s)   n(s, PRUint32(sizeof(s)-1))
  91.   #define NS_NAMED_MULTILINE_LITERAL_STRING(n,s)  const NS_ConvertASCIItoUTF16 n(s, PRUint32(sizeof(s)-1))
  92.   typedef NS_ConvertASCIItoUTF16 nsLiteralString;
  93. #endif
  94.  
  95. /*
  96.  * Macro arguments used in concatenation or stringification won't be expanded.
  97.  * Therefore, in order for |NS_L(FOO)| to work as expected (which is to expand
  98.  * |FOO| before doing whatever |NS_L| needs to do to it) a helper macro needs
  99.  * to be inserted in between to allow the macro argument to expand.
  100.  * See "3.10.6 Separate Expansion of Macro Arguments" of the CPP manual for a
  101.  * more accurate and precise explanation.
  102.  */
  103.  
  104. #define NS_L(s)                                   NS_LL(s)
  105.  
  106. #define NS_LITERAL_STRING(s)                      NS_STATIC_CAST(const nsAFlatString&, NS_MULTILINE_LITERAL_STRING(NS_LL(s)))
  107. #define NS_LITERAL_STRING_INIT(n,s)               NS_MULTILINE_LITERAL_STRING_INIT(n, NS_LL(s))
  108. #define NS_NAMED_LITERAL_STRING(n,s)              NS_NAMED_MULTILINE_LITERAL_STRING(n, NS_LL(s))
  109.  
  110. #define NS_LITERAL_CSTRING(s)                     NS_STATIC_CAST(const nsDependentCString&, nsDependentCString(s, PRUint32(sizeof(s)-1)))
  111. #define NS_LITERAL_CSTRING_INIT(n,s)              n(s, PRUint32(sizeof(s)-1))
  112. #define NS_NAMED_LITERAL_CSTRING(n,s)             const nsDependentCString n(s, PRUint32(sizeof(s)-1))
  113.  
  114. typedef nsDependentCString nsLiteralCString;
  115.  
  116. #endif /* !defined(nsLiteralString_h___) */
  117.